package thread;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 1.设定 AtomicInteger 的 value 原始值为 A，从 Java 内存模型得知，线程 1 和线程 2 各自持有一份 value 的副本，值都是 A。
 * 2.线程 1 通过getIntVolatile(var1, var2)拿到 value 值 A，这时线程 1 被挂起(等待cpu时间片轮转)。
 * 3.线程 2 也通过getIntVolatile(var1, var2)方法获取到 value 值 A，并执行compareAndSwapInt方法比较内存值也为 A，成功修改内存值为 B。
 * 4.这时线程 1 恢复执行compareAndSwapInt方法比较，发现自己手里的值 A 和内存的值 B 不一致，说明该值已经被其它线程提前修改过了。
 * 5.线程 1 重新执行getIntVolatile(var1, var2)再次获取 value 值，因为变量 value 被 volatile 修饰，所以其它线程对它的修改，线程 A 总是能够看到，线程A继续执行compareAndSwapInt进行比较替换，直到成功。
 */
public class CAS {
    public static void main(String[] args) {
        AtomicInteger integer = new AtomicInteger();
    }
}
